package cn.bookshare.user.action;
import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import cn.bookshare.user.service.UserService;
import cn.bookshare.user.vo.User;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
 * 用户模块Action类
 * @author 热血绅士
 *
 */
public class UserAction extends ActionSupport implements ModelDriven<User>{
	//模型驱动使用的对象
	private User user = new User();
	public User getModel(){
		return user;
	}
	//注入UserService
	private UserService userService;
	
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	// 接收验证码:
	private String checkcode;
	public void setCheckcode(String checkcode) {
		this.checkcode = checkcode;
	}
	
	// 调转到注册页面的执行方法
	public String registPage(){
		return "regist1";
	}
	
	/**
	 * AJAX进行异步校验用户名的方法
	 * @throws IOException 
	 */
	public String findByName() throws IOException{
		// 调用Service进行查询
		User existUser = userService.findByUserName(user.getUsername());
		// 获取response对象，向页面输出
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=UTF-8");
		// 判断
		if(existUser != null){
			// 查询到该用户：用户名已存在
			response.getWriter().println("<font color='red'>用户名已存在哦！</font>");
		}else{
			//未查询到该用户：用户名可以使用
			response.getWriter().println("<font color='green'>用户名可以使用哦！</font>");
		}
		return NONE;
	}
	
	/**
	 * 用户注册的方法
	 */
	public String regist(){
		userService.save(user);
		this.addActionMessage("注册成功，请去邮箱激活");
		return "regist2";
	}
	
	//用户激活的方法
	public String active(){
		// 根据激活码查询用户
		User existUser = userService.findByCode(user.getCode());
		if(existUser == null){
			// 激活码错误
			this.addActionMessage("激活失败:激活码错误！");
		}else{
			//激活成功,修改用户状态
			existUser.setState(1);
			existUser.setCode(null);
			userService.update(existUser);
			this.addActionMessage("激活成功！请去登陆");
		}
		return "regist3";
	}
	
	// 调转到登陆界面
	public String loginPage(){
		return "loginPage";
	}
	
	// 登录的方法
	public String login() {
		// 判断验证码
		// 从session 中获取验证码的随机值
		String checkcode1 = (String) ServletActionContext.getRequest()
				.getSession().getAttribute("checkcode");
		if(!checkcode1.equalsIgnoreCase(checkcode)){
			this.addActionError("验证码输入错误！");
			return "checkcodeFail";
		}

		User existUser = userService.login(user);
		// 判断
		if (existUser == null) {
			// 登录失败
			this.addActionError("登录失败:用户名或密码错误或用户未激活!");
			return "login";
		} else {
			// 登录成功
			// 将用户的信息存入到session中
			ServletActionContext.getRequest().getSession()
					.setAttribute("existUser", existUser);
			// 页面跳转
			return "loginSuccess";
		}
	}
	
	//用户退出的方法
	public String quit(){
		// 销毁session
		ServletActionContext.getRequest().getSession().invalidate();
		return "quit";
	}
}
